Statistik och dataanalys I

F7: Enkel linjär regression

Valentin Zulj

Vad har vi gjort hittills?

  • Förra gången pratade vi om linjära samband och korrelationkoefficienten
  • Vi tittade bl.a. på sambandet mellan vikt och bränsleförbrukning för bilar, och sa att det verkade vara relativt linjärt

Vad vi ska göra nu?

  • Korrelationskoefficienten mäter styrkan på det linjära sambandet, men ger oss inte mycket mer information än så

  • Antag att vi är intresserade av bränsleförbrukningen hos en bil som inte finns med i vårt dataset, men som vi vet väger väger 2 ton

  • Även om korrelationen pekar på att vikt och förbrukting är linjärt relaterade, säger den inget om hur vi kan använda vikt för att förutspå förbrukning

  • För att göra denna typ av prediktion kan använda linjär regression, som är vårt huvudfokus idag

Enkel linjär regression

Uppskatta värdet av y när du känner till värdet av x

  • För att passa in i mönstret i vårt spridningsdiagram borde en bil som väger 2 ton förbruka ungefär 1.5–2 ton
  • En sådan “gissning” kan i vissa fall vara tillräcklig, men hur gör vi om vi vill sätta en siffra på vår uppskattning av bensinförbrukningen?

Uppskatta värdet av y när du känner till värdet av x

  • En metod för att uppskatta bensinförbrukningen när vi känner till vikten på en bil kan vara att dra en linje rakt genom svärmen av punkter
  • Vi ser att vår linje är ungefär vid 1.7 på y-axeln när värdet på x-axeln är 2
  • Slutsats: Vi uppskattar att en bil som väger 2 ton drar 1.7 liter per mil

Enkel linjär regression

  • Analysen vi landade i på förra bilden kallas enkel linjär regression.
  • Syftet med enkel linjär regression är vanligtvis att
    • Undersöka hur sambandet mellan \(x\) och \(y\) ser ut
    • Prediktera värdet på \(y\) när vi känner till \(x\)

Liten ordlista för enkel linjär regression (del 1)

  • Att prediktera (predict) är att göra en uppskattning av ett värde när vi inte kan göra en direkt observation (dvs när vi inte kan göra en mätning)
  • Substantivformen av ordet är prediktion
    • “Syftet med vår modell är att göra en prediktion av bensinförbrukningen”
  • Vi kan säga estimera eller skatta på ungefär samma sätt som prediktera
    • “Vi estimerar/skattar bensinförbrukningen till 1.7 liter per mil”
  • Substantivformerna är estimat och skattning
    • “Vårt estimat/Vår skattning är att bilen förbrukar 1.7 liter per mil”

Liten ordlista för enkel linjär regression (del 2)

  • Vår \(y\)-variabel kan kallas responsvariabel, eller den beroende variabeln
  • Vår \(x\)-variabel kan kallas förklaringsvariabel, eller den oberoende variabeln
  • Vi kallar det enkel linjär regression (simple linear regression) då modellen för \(y\) bara bygger på en enda (en enkel) förklaringsvariabel
  • I multipel linjär regression (multiple linear regression) använder vi flera förklaringsvariabler – men mer om detta någon annan gång

Enkel linjär regression

  • Rent intuitivt är linjär regression inte mer komplicerat än att dra en linje genom punktsvärmen, och läsa av vilket \(y\)-värde som passar ett givet \(x\)
  • Men i praktiken krävs en del beräkningar för att bestämma exakt hur regressionslinjen bör dras för att ge en bra modell
  • Vanligtvis vill vi också göra andra beräkningar som är kopplade till regressionsmodellen, t.ex. för att utvärdera hur bra modellen är
  • Vi kommer titta närmare på dessa typer av beräkningar nu

Regressionslinjen

  • En regressionslinje kan definieras med två regressionskoefficienter:
    • Intercept: regressionslinjens \(y\)-värdet när \(x=0\)
    • Lutning (slope): anger hur många enheter \(y\) ökar/minskar när \(x\) ökar med en enhet
  • Regressionslinjen på bilden har en lutning som är ungefär 0.8 och ett intercept strax över 0

Regressionslinjen

  • Ren matematiskt skriver vi regressionslinjen som \[ \hat{y} = b_0 + b_1 x \]

  • Här betecknar \(b_0\) är interceptet och \(b_1\) är lutningen

  • Jämför med vad ni vet om den räta linjens ekvation!

  • Om vi har värden för \(b_0\), \(b_1\) och \(x\) kan vi skatta \(y\) – hatten över \(y\) säger att \(\hat y\) är en skattning av \(y\)

  • Vid behov kan vi använda beskrivande variabelnamn istället för \(x\) och \(y\), t.ex.

\[\widehat{\text{litermil}} = b_0 + b_1 \text{vikt}\]

Skillnaden mellan \(y\) och \(\hat y\)

  • Vi har redan nämnt “hatten” ovanför \(y\) i formeln \[ \hat{y} = b_0 + b_1 x \]
  • Vi skriver som sagt \(\hat{y}\) istället för \(y\)\(\hat y\) är en skattning av \(y\), och inte det verkliga värdet på \(y\)
  • I vårt första exempel estimerade vi att bränsleförbrukningen är 1.7 liter/mil för en bil som väger 2 ton – i det fallet kunde vi skriva \(\hat{y}=1.7\)
  • Om vi hade skrivit \(y = 1.7\) hade vi hävdat att bilens verkliga förbrukning är 1.7 liter/mil – detta hade varit olämpligt, då estimat inte är perfekta

Tolkning av enkel linjär regressionsmodell

  • Ett vanligt syfte med en regressionsmodell är att skatta värdet på responsvariabeln m.h.a den förklarande variabeln, som vi precis har gjort

  • Ett annat syfte kan vara att ge mer konkreta utsagor om sambandet

  • Vår modell skattar bensinförbrukning hos en bil, med hjälp av dess vikt

  • Vi kan skriva ut modellen som \(\widehat{\text{litermil}} = b_0 + b_1 \cdot \text{vikt}\)

  • Anta att \(b_0=0.146\) och \(b_1=0.78\), då har vi

\[\widehat{\text{litermil}} = 0.146 + 0.78 \cdot \text{vikt}\]

Tolkning av enkel linjär regressionsmodell

  • Vi har alltså \[ \widehat{\text{litermil}} = 0.146 + 0.78 \cdot \text{vikt} \]

  • \(b_1=0.78\) betyder att en bil, enligt modellen, förbrukar ytterligare 0.78 liter/mil bensin för varje extra ton som bilen väger

  • \(b_0=0.146\) betyder att en bil som väger 0 ton, enligt modellen, förbrukar 0.146 liter per mil
  • I vårt fall är denna information inte meningsfull (varför?), så vi är försiktiga med att tolka interceptet bokstavligt

Extrapolering

  • Modellen blir mer osäker ju längre bort från punktsvärmen vi kommer
  • Vi bör därför vara försiktiga med att använda modellen för att prediktera värden utanför det intervall av \(x\) där våra datapunkter ligger
  • I vårt exempel är det risky business att använda modellen för bilar som väger mindre än 0.5 ton eller mer är 2.5 ton

Viktiga observationer om linjär regression

OBS!

  • När vi tittade på korrelation betonade vi att korrelation inte är kausalitet
  • Att \(x\) har en stark korrelation till \(y\) behöver inte betyda att \(x\) orsakar \(y\)
  • Samma sak gäller när vi tolkar lutningsparametern \(b_1\) i en regressionsmodell
  • Bara för att \(b_1=0.78\) kan vi inte utan vidare säga att en viktökning med ett ton medför att bränsleförbrukningen ökar med 0.78 liter/mil
  • Förändringen i bränsleförbrukning kan också påverkas av hur vikten fördelas, hur ansträngd bilens motor redan är, etc
  • Regressionsmodeller visar samband, inte kausalitet!
  • För att kunna hävda att ett ton i ökad vikt orsakar en viss ökning av bränsleförbrukningen måste andra vetenskapliga metoder användas

Övning i regressionsanalys

  • Bilden visar en linjär regressionsmodell, där varje observation är en student

  • \(x\)-axeln visar antalet avslutade terminer och \(y\)-axeln antalet tagna poäng

  • Fundera lite snabbt på frågorna

    1. Vilka värden har parametrarna \(b_0\) och \(b_1\)?
    2. Hur ska parametrarna tolkas?
    3. Hur många poäng skattar modellen att en student har efter 2 terminer?

Övning i regressionsanalys

Frågor

  1. Vilka värden har parametrarna \(b_0\) och \(b_1\)?
  2. Hur ska parametrarna tolkas?
  3. Hur många poäng skattar modellen att en student har efter 2 terminer?

Övning i regressionsanalys

  1. Vilka värden har parametrarna \(b_0\) och \(b_1\)?
    • Interceptet är värdet på \(\hat y\)\(x = 0\), alltså har vi \(b_0=0\)
    • \(\hat{y}\) ökar med 25 poäng för varje termin som \(x\) ökar, alltså har vi \(b_1=25\)
  2. Hur ska parametrarna tolkas?
    • \(b_1\) kan tolkas som att antalet poäng ökar med 25 poäng per termin
    • \(b_0\) kan tolkas som att en student som pluggat i 0 terminer har tagit 0 poäng
  3. Hur många poäng skattar modellen att en student har efter 2 terminer?
    • Vår modell är \(\widehat{\text{poäng}} = 0 + 25 \cdot \text{terminer}\), och efter 2 terminer är uppskatningen att en student har \(0 + 25 \cdot 2=50\) poäng

Regression mot medelvärdet

  • Regression mot medelvärdet: (regression to the mean): En observation med ett avvikande \(x\)-värde resulterar i en prediktion \(\hat{y}\) som är mindre avvikande
  • Exempel: Anta att \(x\) befinner sig 2 standardavvikelser från \(\bar{x}\), då avviker \(\hat{y}\) i regel med mindre än 2 standardavvikelser
  • Avståndet mellan \(\hat{y}\) och \(\bar{y}\) är alltså mindre än avståndet mellan \(x\) och \(\bar{x}\), mätt i antalet standardavvikelser
  • Vi kommer inte att fördjupa oss här, men “regression to the mean” är ett begrepp som är bra att känna till betydelsen av

Residualer

  • För varje observation kan vi räkna ut ett prediktion \(\hat{y}= b_0 + b_1 x\)
  • För varje observerat \(x\) har vi så både en prediktion från regressionslinjen (\(\hat y\)), och det sanna värdet \(y\)
  • Skillnaden \(e = y - \hat{y}\) kallas residualen(the residual), och vi har en residual för varje observation i datameterialet (se bild nedan)
  • Residualerna kan vara positiva eller negativa – vad betyder det?

Residualer

  • Ju mindre residualerna är desto, bättre passar modellen ihop med observationerna

Residualer och prediktionsfel

  • I formeln \(e = y - \hat{y}\) står \(e\) alltså för residualen – \(e\) som i error
  • Residualen för en observation är ett mått på hur stort fel modellen gör när den skattar just den observationen
  • Ju mindre residualerna är desto bättre fångar modellen observationerna i vårt datamaterial
  • Vårt mål är att hitta en regressionslinje med så små residualer som möjligt
  • Vi kan mäta den sammanlagda storleken på prediktionsfelen med summan \[ \sum_{i = 1}^n{e_i^2} = e_1^2 + e_2^2 + e_3^2 + \ldots + e_n^2 \]

Minsta kvadratmetoden

  • Vi betraktar den räta linje som minimerar \(\sum_i e_i^2\) som den bästa regressionslinjen
  • Eftersom vi minimerar de kvadrerade prediktionsfelen, kallas denna skattningsmetod för minsta kvadratmetoden (method of least squares)
  • Linjen som minimerar \(\sum_i e_i^2\) skrivs (enligt tidigare) som \[ \hat{y} = b_0 + b_1 x \]
  • Nu kan vi dock lägga till att värdena som minimerar kvadratsumman är \[ b_1 = r_{x,y} \cdot \cfrac{s_y}{s_x}, \; \text{ och } \; b_0 = \bar{y} - b_1 \bar{x} \]

Minsta kvadratmetoden

  • Minsta kvadratmetoden ger som sagt \[ b_1 = r_{x,y} \cdot \cfrac{s_y}{s_x}, \; \text{ och } \; b_0 = \bar{y} - b_1 \bar{x} \]

  • Vi ser så att vi kan beräkna \(b_0\) och \(b_1\) med hjälp av

    • Korrelationskoefficienten \(r\)
    • Standardavvikelserna \(s_x\) och \(s_y\)
    • Medelvärdena \(\bar x\) och \(\bar y\)
  • Alla dessa känner vi igen sedan tidigare

Minsta kvadratmetoden i R

  • Som exempel använder vi datamaterialet med bränsleförbrukning och vikt
  • Vi kallar förbrukning för litermil och vikt för viktton
  • Vi gör det på två sätt, först med formlerna och sedan med funktionen lm()

Minsta kvadratmetoden i R – beräkning med formler

  • Vi kommer ihåg att vi kan beräkna \(b_0\) och \(b_1\) med hjälp av
    • korrelationscoefficienten \(r\)
    • standardavvikelserna \(s_x\) och \(s_y\)
    • våra medelvärden \(\bar{x}\) och \(\bar{y}\)
  • I R kör vi
r <- cor(mtcars$litermil, mtcars$viktton) # Korrelation
sx <- sd(mtcars$viktton)  # Standardavvikelse x
sy <- sd(mtcars$litermil) # Standardavvikelse y
xbar <- mean(mtcars$viktton)  # Medelvärde x
ybar <- mean(mtcars$litermil) # Medelvärde y
sprintf("r=%.2f, sx=%.2f, sy=%.2f, xbar=%.2f, ybar=%.2f",
        r, sx, sy, xbar, ybar)
[1] "r=0.89, sx=0.44, sy=0.39, xbar=1.46, ybar=1.28"

Minsta kvadratmetoden i R – beräkning med formler

  • Med hjälp av dessa siffror kan vi beräkna \[ b_1 = r_{x,y} \cfrac{s_y}{s_x}, \; \text{och} \; b_0 = \bar{y} - b_1 \bar{x} \]
b1 <- r * sy / sx
b0 <- ybar - b1 * xbar
sprintf("b0=%f, b1=%f", b0, b1)
[1] "b0=0.145934, b1=0.778348"
  • Vår modell är alltså \[ \widehat{\text{litermil}} = 0.145934 + 0.778348 \cdot \text{vikt} \]
  • Notera att vi även kan beräkna \(r\), \(s_x\) och \(s_y\) med egna formler istället för cor() och sd()

Enkel linjär regression - beräkning med lm()

  • Nu gör vi samma beräkning med funktionen lm()
my_regressionmodel <- lm(litermil ~ viktton, data=mtcars)
summary_model <- summary(my_regressionmodel)
summary_model$coefficients
             Estimate Std. Error   t value     Pr(>|t|)
(Intercept) 0.1459341 0.11106493  1.313953 1.988214e-01
viktton     0.7783476 0.07284538 10.684928 9.565824e-12
  • Modellparametrarna återges i kolumnen "Estimate", och vi har att
    • (Intercept) är vårt \(b_0\),
    • viktton är vårt \(b_1\) (\(b_1\) hör till den variabeln viktton)

Slump och signifikans

P-värde i regressionsoutput

             Estimate Std. Error   t value     Pr(>|t|)
(Intercept) 0.1459341 0.11106493  1.313953 1.988214e-01
viktton     0.7783476 0.07284538 10.684928 9.565824e-12
  • Kolumnen längst till höger kallas Pr(>|t|), och innehåller p-värden, som har med statistiskt signifikans att göra
  • Det är vanligt att betrakta en koefficientskattning statistiskt signifikant om p-värdet är lägre än 0.05, men det är upp till bedömaren var gränsen ska går
  • Det är viktigt att komma ihåg att statistisk signifikans inte medför praktisk signifikans – det är kontexten som sätter värde på statistisk signifikans
  • Inom medicin brukar man t.ex. skilja statistisk signifikans från klinisk signifikans

Slump och signifikans

  • Vi kommer inte beräkna signifikans för hand i den här delkursen (det kommer på Jonas del), men vi ska gå igenom konceptet
  • Mer specifikt är vi intresserade av signifikansen i lutningskoefficenten \(b_1\) (vi struntar vanligtvis i \(b_0\))

Slump och signifikans

  • Vi säger att parametern \(b_1\) är signifikant om vi drar slutsatsen att sambandet vi har hittat i våra data gäller generellt för alla bilmodeller
  • Med andra ord drar vi slutsatsen att sambandet inte beror på slumpen, ungefär som vi har diskuterat tidigare
  • När vi säger att ett samband inte är signifikant menar vi att sambandet i vår data mycket väl kan vara orsakat av slumpen
  • När vi säger att ett samband är signifikant menar vi att sambandet i vår data med största sannolikhet inte är ett resultat av slumpen
  • Kom ihåg: Att ett samband är signifikant i statistisk mening behöver inte betyda att sambandet är betydelsefullt i mer allmän bemärkelse!

Slump och signifikans

  • Vi har redan sett att p-värdet för \(b_1\) är väldigt lågt i vårt exempel med bilars vikt och bensinförbrukning, vilket visar statistisk signifikans.
  • Nu ska vi visa på ett annat sätt att \(b_1\) är signifikant
  • Om det inte fanns ett samband mellan bensinförbrukning och vikt, då kunde vilken bensinförbrukning som helst ha varit kopplad till vilken vikt som helst
  • Vi ska visa några grafer för hur det slumpvisa utfallet kan bli om det saknas samband mellan vikt och bensinförbrukning (se nästa slide)

Slump och signifikans

  • Den första grafen är vår ursprungliga graf, de övriga graferna visar hur det slumpvisa utfallet kan bli om det saknas ett verkligt samband

Slump och signifikans

  • Nu slumpar vi fram 1000 dataset utifrån hypotesen att det saknas koppling mellan vikt och bensinförbrukning
  • För varje dataset räknar vi ut lutningskoefficienten \(b_1\)
  • Histogrammet visar hur de 1000 lutningskoefficienterna \(b_1\) fördelar sig

Slump och signifikans

  • Vi ser att ingen av de slumpvisa koefficienterna är så stor som 0.78
  • Slutsatsen blir att slumpen troligtvis inte orsakade det samband som vi såg i vår data, och därför betraktar vi sambandet som signifikant

Modellantaganden och residualanalys

Residualanalys

  • Vi har redan introducerat residualerna, och beskrivit hur de används för att hitta den bästa regressionslinjen (linjen som minimerar \(\sum_i e_i^2\))
  • Nu återvänder vi till residualerna, och går igenom hur de kan användas för att utvärdera våra modellantaganden
  • Modellantaganden är antaganden som måste vara uppfyllda för att våra resultat ska vara tillförlitliga

Residualanalys

  • Statistiska modeller bygger ofta på antaganden, regressionsanalys likaså
  • När vi använder regressionsanalys gör vi följande två antaganden:
    1. Residualerna är normalfördelade
    2. Residualernas varians är konstant
  • Dessa antaganden är främst relevanta när vi vill räkna ut felmarginaler för våra skattade värden
  • Vi ska inte göra sådana beräkningar här, men det är bra att redan nu skapa vanan att kontrollera residualernas mönster
  • Vi använder framför allt två typer av grafer för residualanalysen
    • Residualgrafer (residual plots)
    • Normalfördelningsgrafer

Residualgrafer

  • Figuren visar en residualgraf för vår regressionsmodellmodell, där \(x\)-axeln visar varje skattning av \(y\), och på \(y\)-axeln visar residualen \(e\)
  • Om residualplotten inte visar något tydligt mönster utan ser slumpmässig ut så är det ett gott tecken

Residualgrafer

  • Om vi ser tydliga outliers bland residualerna så representerar de observationer som inte passar väl in i modellen
  • Det kan finnas anledning att studera dessa observationer för att förstår varför de skiljer ut sig

Residualgrafer

  • Sammanfattningsvis om residualgrafer

“A scatterplot of the residuals vs. the x-values should be the most boring scatterplot you’ve ever seen. It shouldn’t have any interesting fatures, like direction or shape.”

DeVeaux et al (2021), page 238

Normalfördelningsgraf

  • På den här bilden ser vi en normalfördelninggraf för samma modell
  • Om residualerna är normalfördelade ska punkterna följa linjen på ett ungefär, vilket de i det här fallet gör

Antaganden uppfyllda

Residualer som inte är normalfördelade

Residualer som inte har konstant varians

Residualer som inte har slumpmässigt mönster

Residualanalys i R

Så här kan vi skapa en residualgraf med R.

lmod2 <- lm(mpg ~ wt, data=mtcars) #Skapa en modell
mtcars$res <- resid(lmod2) # Skapa en vektor med residualerna
mtcars$y_hatt <- fitted(lmod2) # Estimerade y-värden
plot(mtcars$res ~ mtcars$y_hatt, ylab="Resid", xlab="y-hatt",
     main="Residplot")
abline(h=0) #Dra en linje genom residualgrafen vid 0

Residualanalys i R

Så här kan vi skapa en normalfördelningsgraf med R.

qqnorm(resid(lmod2), main="Normalfördelningsgraf") #Rita graf
qqline(resid(lmod2)) #Lägg till en linje i grafen

Förklaringsgraden \(R^2\)

Förklaringsgrad

  • \(R^2\), som uttalas R-kvadrat/R-två (en: R-squared), kan användas som ett mått på hur bra en regressionsmodell är
  • \(R^2\) berättar hur väl modellen förklarar variationen i responsvariabeln
  • För att förstå vad som menas med detta börjar vi medden enklaste tänkbara modellen som inte innehåller någon förklaringsvariabel
  • Den enklaste sådana modellen innehåller bara interceptet, alltså \(\hat{y} = b_0\)
  • I en regressionsmodell med bara interceptet blir \(b_0=\bar{y}\), dvs skattningen blir alltid detsamma som variabelns medelvärde

Enkel linjär regression - R-kvadrat

  • Modellen \(\hat{y} = b_0\) representeras av den gula linjen i bilden
  • Modellen gör samma prediktion för alla bilar, och ger därmed ingen förklaring till varför förbrukningen varierar mellan modeller

Förklaringsgrad

  • Vi lägger nu till vikt som förklarande variabel, och får modellen \(\hat{y} = b_0+b_1x\) (bild till höger)
  • Modellen till höger förklarar en stor del av variationen med att högre vikt är associerat med högre bensinförbrukning
  • Den variation som fortfarande är oförklarad illustreras med streckade linjer

Förklaringsgrad

  • \(R^2\) anger hur stor andel av variationen i \(y\) som en modell förklarar
  • Som exempel betyder alltså \(R^2 = 0.6\) att modellen förklarar 60% av den totala variationen i \(y\)
  • För att räkna ut \(R^2\) för en modell behöver vi två nya begrepp
    • SST (Sum of Squares Total): Den totala variationen i responsvariabeln
    • SSE (Sum of Squares Error): Den variation som inte förklaras av modellen

Förklaringsgrad

  • Vi kan räkna ut SST och SSE med formlerna

\[ \text{SST}=\sum_{i=1}^n (y_i - \bar{y})^2, \; \text{ och } \; \text{SSE} = \sum_{i=1}^n(y_i - \hat{y})^2 \]

Förklaringsgrad

När vi har räknat ut \(\text{SST}\) och \(\text{SSE}\) kan vi räkna ut \(R^2\) som

\[ R^2 = 1 - \cfrac{SSE}{SST} \]

  • Uttrycket \(SSE/SST\) är andelen av den totala variationen som modellen lämnar oförklarad
  • \(R^2 = 1 - SSE/SST\) är därför den andel som är förklarad
  • \(SSE \leq SST\), vilket innebär att \(0 \leq R^2 \leq 1\)
  • Notera: i den enkla modellen är \(\hat{y} = \bar{y}\), och \(\text{SSE} = \text{SST}\), vilket ger \(R^2=0\)
  • Om en modell har \(R^2=1\) betyder det att alla ligger observationer exakt på regressionslinjen

Förklaringsgrad

  • I enkel linjär regression gäller att \(R^2=r^2\), där \(r\) är korrelationskoefficienten mellan \(y\)-variebeln och \(x\)-variabeln
  • I multipel regression kan vi istället sätta \(r\) till korrelationen mellan \(y\) och \(\hat{y}\)
  • Det går inte att säga generellt vad ett som är ett bra värde på \(R^2\)
  • I vissa naturvetenskaper kan det förekomma att \(R^2\) är nära 1
  • I samhällsvetenskaper är det vanligt med modeller där \(R^2\) är en bra bit under 0.5
  • Det kan bero på att samhällsfenomen har många bidragande orsaker, vilket gör det svårt att mäta/inkludera mer än ett fåtal av dem i en modell

Förklaringsgrad

  • Nedan ser vi två figurer ur Walpole et al. (2016)

    • I figuren till vänster förklarar modellen nästan all variation
    • I figuren till höger förklara modellen nästan ingen del av variationen

Förklaringsgrad

  • Vi ha talat om SST och SSE
  • Ett tredje begrepp är SSR (Sum of Squares Regression), som mäter variationen av \(\hat{y}\) runt variabelns medelvärde \(\bar{y}\)

Förklaringsgrad

  • Vi räknar ut SSR med formeln

\[ \text{SSR} = \sum_{i=1}^n (\hat{y} - \bar{y})^2 \]

  • SST, SSR och SSE förhåller sig till varandra på så sätt att \[ SST = SSR + SSE \]

  • Vi kan därför även beräkna \(R^2\) som \[ R^2 = \cfrac{SSR}{SST} \]

  • Att dela upp variansen på det här sättet kallas Analysis of variance (ANOVA)

Enkel linjär regression - R-kvadrat

Förklaringsgrad

  • Nu ska vi räkna ut \(R^2\) för vår modell som estimerar responsvariabeln bensinförbrukning med förklaringsavariabeln vikt
  • Först räknar vi ut SST, SSR och SSE
lmod <- lm(litermil~viktton, data=mtcars)
y <- mtcars$litermil
y_hatt <- fitted(lmod)

SST <- sum((y - mean(y))^2)
SSR <- sum((y_hatt - mean(y))^2)
SSE <- sum((y - y_hatt)^2)

sprintf("SST = %.3f, SSR = %.3f, SSE = %.3f", SST, SSR, SSE)
[1] "SST = 4.680, SSR = 3.706, SSE = 0.974"

Enkel linjär regression - R-kvadrat i R

  • Vi såg att SST = 4.680, och jämför med \(SSR + SSE\) för att bekräfta \(SSR+SSE=SST\)
sprintf("SSR + SSE = %.3f", SSR + SSE)
[1] "SSR + SSE = 4.680"
  • Sedan räknar vi ut \(R^2\) med formeln \(R^2 = 1 - \cfrac{SSE}{SST}\)
R2 <- 1 - SSE/SST
sprintf("With the formula 1 - SSE/SST we get R2 = %.4f", R2)
[1] "With the formula 1 - SSE/SST we get R2 = 0.7919"

Enkel linjär regression - R-kvadrat i R

Vi ser att lm räknar ut samma värde för R-squared.

summary(lmod)

Credits

Dessa slides skapades av Karl Sigfrid för kursen Statistik och Dataanalys I och har uppdaterats av Oskar Gustafsson och Valentin Zulj